package comunicacion.simulador;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

import javax.vecmath.Point3d;

public class Radar extends Thread {

	private Simulador sim;
	
	public Radar(Simulador sim) {
		this.sim = sim;
	}
	
	public void run() {
		while (true) {
			DatagramPacket paquete = new DatagramPacket(new byte[40000], 40000);
			try {
				sim.getSocket().receive(paquete);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			// Obtenemos el mensaje recibido cargado en un string
			String mensaje = new String(paquete.getData(), 0, paquete.getData().length-1).trim();
			//System.out.println(mensaje);
			
			// Vemos si es un broadcast, o si no es la informacion que estamos esperando
			if (mensaje.substring(1, new String("WorldBroadcast").length()+1).equals("WorldBroadcast")) {			
				// Desde el mensaje que recibimos desde el simulador, parseamos los datos del robot
				Robot[] robots = ParserXml.getRobots(mensaje);
			 
				for (int i=0; i<robots.length; i++) {				
					// Interesan las coordenas de la posicion (x,y); asi como tambien la rotacion
					Point3d unaCoord = new Point3d(robots[i].getPosX(), robots[i].getPosY(), robots[i].getRotZ());
					sim.setUltimasCoordenadas(robots[i].getEntityId(), unaCoord);
				} 			
			}
			
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {}
		}
	}
}
